package com.ylz.sjzx.sio.common.core.utils;

import java.lang.reflect.Field;

/**
 * @author: qingwei.lin@luckincoffee.com
 * @create: 2019-11-05 15:24
 * @description:
 **/
public class ReactUtil {

    /**
     * 设置父类属性
     *
     * @param fieldName
     * @param object
     * @return
     */
    public static boolean setSuperClassFieldValueByFieldName(Object object, String fieldName, Object value) {
        try {
            // 获取obj类的字节文件对象
            Class c = object.getClass();
            // 获取该类的成员变量
            Field f = c.getSuperclass().getDeclaredField(fieldName);
            // 取消语言访问检查
            f.setAccessible(true);
            // 给变量赋值
            f.set(object, value);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 根据属性名设置属性值
     *
     * @param fieldName
     * @param object
     * @return
     */
    public static boolean setFieldValueByFieldName(Object object, String fieldName, Object value) {
        try {
            // 获取obj类的字节文件对象
            Class c = object.getClass();
            // 获取该类的成员变量
            Field f = c.getDeclaredField(fieldName);
            // 取消语言访问检查
            f.setAccessible(true);
            // 给变量赋值
            f.set(object, value);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 根据属性名获取属性值
     *
     * @param fieldName
     * @param object
     * @return
     */
    public static Object getFieldValueByFieldName(String fieldName, Object object) {
        try {
            Field field = object.getClass().getDeclaredField(fieldName);
            //设置对象的访问权限，保证对private的属性的访问
            field.setAccessible(true);
            return field.get(object);
        } catch (Exception e) {
            return null;
        }
    }
}
